/*
 * CommunicationCanastos.h
 *
 *  Created on: 16/11/2013
 *      Author: gonzalo
 */

#ifndef COMMUNICATIONCANASTOS_H_
#define COMMUNICATIONCANASTOS_H_

#include "../IPC/SharedMemoryInterface.h"
#include "MiddlewareCommon.h"
#include "../middleware/CommunicationCanastos.h"
#include "../common/StringUtils.h"
#include "../logger/logger.h"

#define CANASTO_AUSENTE -1

namespace middleware {

class CommunicationCanastos {
public:
	CommunicationCanastos(char zonaKey);
	static void create(char zonaKey);
	static void destroy(char zonaKey);
	bool atenderEsperaDePiezaEnCinta1(TipoPieza pieza);
	bool atenderEsperaDePiezaEnCinta2(TipoPieza pieza);
	void agregarEsperaDePieza(TipoPieza pieza);
	void reemplazarCanasto(Canasto canasto, int pos);

	void marcarUso(TipoPieza pieza);
	void desmarcarUso(TipoPieza pieza);
	int usarCantidad(TipoPieza pieza, int cantidad);

	EstadoCanasto getEstadoCanasto(TipoPieza pieza);
	std::vector<Canasto> obtenerCanastos();
	void liberarCanastos();
	virtual ~CommunicationCanastos();
private:
	ipc::SharedMemoryInterface<MemCanastos> shMemCanastos;
	static const std::string AGV_SHMEM_CANASTOS_PATH;
	static void inicializar(ipc::SharedMemoryInterface<MemCanastos> memTmp);
};

} /* namespace middleware */
#endif /* COMMUNICATIONCANASTOS_H_ */
